package com.jbinfo.common.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.UUID;

import org.apache.log4j.Logger;

/**
 * 
 * @ClassName: StringUtil
 * @Description: TODO
 * @author zhanglei
 * @date 2015-4-27 下午6:05:46
 */
public class StringUtil {

	private static Logger LOG = Logger.getLogger(StringUtil.class);
	// 转化16进制时需要的字符串
	private static final char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6',
			'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

	/**
	 * 
	 * @Title: findFieldGetMethod
	 * @Description: TODO 获取一个属性对应的get方法名称
	 * @author zhanglei
	 * @date 2015-4-27 下午6:06:08
	 * @param @param fieldName
	 * @param @return 设定文件
	 * @return String 返回类型
	 * @throws
	 */
	public static String findFieldGetMethod(String fieldName) {
		return "get" + fieldName.substring(0, 1).toUpperCase()
				+ fieldName.substring(1);
	}

	/**
	 * 格式化数字为千分位显示；
	 * 
	 * @param 要格式化的数字
	 *            ；
	 * @return
	 */
	public static String fmtMicrometer(String text) {
		DecimalFormat df = null;
		if (text.indexOf('.') > 0) {
			if (text.length() - text.indexOf('.') - 1 == 0) {
				df = new DecimalFormat("###,##0.");
			} else if (text.length() - text.indexOf('.') - 1 == 1) {
				df = new DecimalFormat("###,##0.0");
			} else {
				df = new DecimalFormat("###,##0.00");
			}
		} else {
			df = new DecimalFormat("###,##0");
		}
		double number = 0.0;
		try {
			number = Double.parseDouble(text);
		} catch (Exception e) {
			number = 0.0;
		}
		return df.format(number);
	}

	/**
	 * 左填充字符串
	 * 
	 * @param 被填充的字符串
	 * @param 被填充长度
	 * @param 填充的字符
	 * @return
	 */
	public static String leftPad(String value, int length, char c) {
		if (value.length() >= length) {
			return value;
		}
		StringBuffer pad = new StringBuffer();
		for (int i = 0; i < length - value.length(); i++) {
			pad.append(c);
		}
		return pad.append(value).toString();
	}

	/**
	 * 判断字符串是否为null或""值或全空格字符串 可以同时判断多个，如果其中一个是，则返回true
	 * 
	 * @param str
	 *            被判断的字符串，可以输入多个
	 * @return
	 */
	public static boolean isEmpty(String... str) {
		if (str == null || str.length == 0) {
			return true;
		}
		for (int i = 0; i < str.length; i++) {
			String string = str[i];
			if (string == null || "".equals(string.trim())) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 将byte数组转化为16进制数组成的字符串
	 * 
	 * @param b
	 *            byte数组
	 * @return 16进制的字符串
	 */
	public static String toHexString(byte[] b) {
		StringBuilder sb = new StringBuilder(b.length * 2);
		for (int i = 0; i < b.length; i++) {
			sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);
			sb.append(HEXCHAR[b[i] & 0x0f]);
		}
		return sb.toString();
	}

	/**
	 * 将16进制字符串转化为byte数组
	 * 
	 * @param s
	 *            16进制数字组成的字符串
	 * @return
	 */
	public static final byte[] toBytes(String s) {
		byte[] bytes;
		bytes = new byte[s.length() / 2];
		for (int i = 0; i < bytes.length; i++) {
			bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2),
					16);
		}
		return bytes;
	}

	/**
	 * @Title: addAsBigDecimal
	 * @Description: 将所有字符串转化为BigDecimal，并将其加和
	 * @param numStrings
	 * @return
	 */
	public static String addAsBigDecimal(String... numStrings) {
		BigDecimal sum = new BigDecimal("0.00");
		for (String string : numStrings) {
			if (StringUtil.isEmpty(string)) {
				continue;
			}
			sum = sum.add(new BigDecimal(string));
		}
		return sum.toString();
	}

	/**
	 * 验证给定字符串是否为UUID格式的字符串
	 * 
	 * @param string
	 * @return
	 */
	public static boolean isUUIDStr(String string) {
		try {
			UUID.fromString(string);
		} catch (RuntimeException e) {
			return false;
		}
		return true;
	}

	/**
	 * 
	 * @Description:TODO
	 * @param text
	 * @param unitValue
	 * @return
	 * @return String
	 * @exception:
	 * @author:
	 * @time:2014-12-18 上午10:31:38
	 */
	public static String fmtMicrometer(String text, int unitValue) {
		double doubleValue = Double.parseDouble(text);
		return fmtMicrometer(doubleValue / unitValue + "");
	}

	/**
	 * 
	 * @Title: trimAll
	 * @Description: TODO 将字符串中的所有空格都删除掉
	 * @author zhanglei
	 * @date 2015-4-27 下午6:06:50
	 * @param @param source
	 * @param @return 设定文件
	 * @return String 返回类型
	 * @throws
	 */
	public static String trimAll(String source) {
		if (source == null) {
			return null;
		}
		if ("".equals(source.trim())) {
			return "";
		}
		return source.replaceAll("\\s+", "");
	}
}
